#pragma once
#include "EngineObject.h"

class ISerializerReadContext : public virtual EngineObject
{
public:
	virtual char* CurrentName() = 0;
	virtual char* CurrentValue() = 0;
	virtual char* CurrentType() = 0;
	virtual char* CurrentVersion() = 0;
	virtual char* ChildName(int index) = 0;
	virtual char* ChildValue(int index) = 0;
	virtual void MoveToChild(int index) = 0;
	virtual void MoveToParent() = 0;

	virtual bool CurrentValueAsBool() = 0;
	virtual signed char CurrentValueAsSChar() = 0;
	virtual unsigned char CurrentValueAsUChar() = 0;
	virtual signed short int CurrentValueAsSShort() = 0;
	virtual unsigned short int CurrentValueAsUShort() = 0;
	virtual signed long int CurrentValueAsSLong() = 0;
	virtual unsigned long int CurrentValueAsULong() = 0;
	virtual float CurrentValueAsFloat() = 0;
	virtual double CurrentValueAsDouble() = 0;
	virtual long double CurrentValueAsLongDouble() = 0;
	virtual signed long long CurrentValueAsSLongLong() = 0;
	virtual unsigned long long CurrentValueAsULongLong() = 0;

	virtual bool ChildValueAsBool(int index) = 0;
	virtual signed char ChildValueAsSChar(int index) = 0;
	virtual unsigned char ChildValueAsUChar(int index) = 0;
	virtual signed short int ChildValueAsSShort(int index) = 0;
	virtual unsigned short int ChildValueAsUShort(int index) = 0;
	virtual signed long int ChildValueAsSLong(int index) = 0;
	virtual unsigned long int ChildValueAsULong(int index) = 0;
	virtual float ChildValueAsFloat(int index) = 0;
	virtual double ChildValueAsDouble(int index) = 0;
	virtual long double ChildValueAsLongDouble(int index) = 0;
	virtual signed long long ChildValueAsSLongLong(int index) = 0;
	virtual unsigned long long ChildValueAsULongLong(int index) = 0;
};
